import os
from dotenv import load_dotenv, find_dotenv
import requests
import json
from langchain_core.tools import tool
from typing import Annotated
from .comm_utils import get_parameter

_ = load_dotenv(find_dotenv())
amap_key = os.environ.get('amap_key')
if amap_key is None:
    raise ValueError("API Key is not set in the .env file")

# 封装高德POI查询接口
def get_location_adcode(keywords, region=""):
    url = f"""https://restapi.amap.com/v5/place/text?key={amap_key}&keywords={keywords}&region={region}"""
    ret = requests.get(url)
    result = ret.json()
    if "pois" in result and result["pois"]:
        return result["pois"]
    return None

# 封装高德天气查询接口
@tool
def get_wx(
    adcode: Annotated[str, "城市编码/地区编码（城市或地区的 adcode）"]
    ) -> json:
    '''
    查询参数指定编码所对应城市或地区的当天及其后三天的天气预报。

    Args：
        adcode: 城市编码/地区编码（城市或地区的 adcode）
    Returns:
        返回一个JSON串，包含所查城市、时间及未来几天的天气预报信息，例如：
        {
            "status": "1",  ##返回状态，值为0或1，1：成功；0：失败
            "count": "1",   ##返回结果总数目
            "info": "OK",   ##返回的状态信息
            "infocode": "10000",    ##返回状态说明,10000代表正确
            "forecasts": [  ##预报天气信息数据
                {
                    "city": "东城区",   ##城市名称
                    "adcode": "110101", ##城市编码
                    "province": "北京", ##省份名称
                    "reporttime": "2024-09-08 11:37:37",    ##预报发布时间
                    "casts": [  ##预报数据 list 结构，元素 cast,按顺序为当天、第二天、第三天的预报数据
                        {
                        "date": "2024-09-08",   ##日期，当天，第1天
                        "week": "7",    ##星期几
                        "dayweather": "小雨",   ##白天天气现象
                        "nightweather": "小雨", ##晚上天气现象
                        "daytemp": "24",    ##白天温度
                        "nighttemp": "20",  ##晚上温度
                        "daywind": "南",    ##白天风向
                        "nightwind": "南",  ##晚上风向
                        "daypower": "1-3",  ##白天风力
                        "nightpower": "1-3",    ##晚上风力
                        "daytemp_float": "24.0",    ##白天温度（浮点数）
                        "nighttemp_float": "20.0"   ##晚上温度（浮点数）
                        },
                        {
                        "date": "2024-09-09",   ##日期，第2天
                        "week": "1",    ##星期几
                        "dayweather": "中雨",   ##白天天气现象
                        "nightweather": "小雨", ##晚上天气现象
                        "daytemp": "24",    ##白天温度
                        "nighttemp": "21",  ##晚上温度
                        "daywind": "北",    ##白天风向
                        "nightwind": "北",  ##晚上风向
                        "daypower": "1-3",  ##白天风力
                        "nightpower": "1-3",    ##晚上风力
                        "daytemp_float": "24.0",    ##白天温度（浮点数）
                        "nighttemp_float": "21.0"   ##晚上温度（浮点数）
                        },
                        {
                        "date": "2024-09-10",   ##日期，第3天
                        "week": "2",    ##星期几
                        "dayweather": "多云",   ##白天天气现象
                        "nightweather": "多云", ##晚上天气现象
                        "daytemp": "27",    ##白天温度
                        "nighttemp": "20",  ##晚上温度
                        "daywind": "北",    ##白天风向
                        "nightwind": "北",  ##晚上风向
                        "daypower": "1-3",  ##白天风力
                        "nightpower": "1-3",    ##晚上风力
                        "daytemp_float": "27.0",    ##白天温度（浮点数）
                        "nighttemp_float": "20.0"   ##晚上温度（浮点数）
                        },
                        {
                        "date": "2024-09-11",   ##日期，第4天
                        "week": "3",    ##星期几
                        "dayweather": "多云",   ##白天天气现象
                        "nightweather": "多云", ##晚上天气现象
                        "daytemp": "27",    ##白天温度
                        "nighttemp": "17",  ##晚上温度
                        "daywind": "东南",  ##白天风向
                        "nightwind": "东南",    ##晚上风向
                        "daypower": "1-3",  ##白天风力
                        "nightpower": "1-3",    ##晚上风力
                        "daytemp_float": "27.0",    ##白天温度（浮点数）
                        "nighttemp_float": "17.0"   ##晚上温度（浮点数）
                        }
                    ]
                }
            ]
        }
    '''
    adcode = get_parameter(adcode)
    url = f"""https://restapi.amap.com/v3/weather/weatherInfo?key={amap_key}&city={adcode}&extensions=all"""
    ret = requests.get(url)
    result = ret.json() 
    #print(f"===结果===\n{result}")
    return result

if __name__ == '__main__':
    print(f"\n===Schema===\n{get_wx.args_schema.schema()}")
    print(f"\n===Test===\n{get_wx.invoke('210100')}")